﻿using System;
using Rendiciones.Web.infraestructura;
using Rendiciones.Logica.Modelos;
using Rendiciones.Logica.Enumeradores;
using Tesla.Excepciones;
using System.Globalization;

namespace Rendiciones.Web.Mantenedores.usercontrols
{
    public partial class ctrlEditorUsuario : UserControlBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                LimpiarErrores(pnlUsuario);
        }

        protected void BtnCerrarEditorUsuarioClick(object sender, EventArgs e)
        {
            Ocultar();
        }

        public void Mostrar(int idUsuario)
        {
            try
            {
                LimpiarErrores(pnlUsuario);

                lblTitulo.Text = "Agregar Usuario";
                var usuario = new Usuario();
                if (!idUsuario.Equals(0))
                {
                    lblTitulo.Text = "Editar Usuario";
                    usuario = Modulos.Rendiciones.Usuarios.Leer(idUsuario);
                    chkRegistrarPassWord.Visible = true;
                }
                else
                {
                    chkRegistrarPassWord.Visible = false;
                    usuario.ActualizarPassword = true;
                }

                if (usuario != null)
                {
                    IdUsuario = usuario.IdUsuario;
                    Nombre = usuario.Nombre;
                    Apellido = usuario.Apellido;
                    Rut = usuario.Rut;
                    Login = usuario.Username;
                    AreaUsuario = usuario.AreaUsuario;
                    Rut = usuario.Rut;
                    Password1 = "";
                    Password2 = "";
                    Activo = usuario.Activo;
                    ActualizarPassword = usuario.ActualizarPassword;
                    Saldo = usuario.Saldo;
                    SaldoAsignado = usuario.SaldoAsignado;
                    Email = usuario.Email;
                    EsAdministrador = usuario.EsAdministrador;
                    Revision = usuario.Revision;
                }

                txtPassword.Enabled = txtPassword2.Enabled = ActualizarPassword;
            }
            catch (Exception exception)
            {
                MuestraMensajeError(pnlUsuario, "<strong>Error:</strong> " + exception.Message);
            }
            mpeEditorUsuario.Show();
        }

        public void Ocultar()
        {
            mpeEditorUsuario.Hide();
        }

        protected void BtnGuardarClick(object sender, EventArgs e)
        {
            try
            {
                LimpiarErrores(pnlUsuario);

                var usuario = new Usuario();
                usuario.IdUsuario = IdUsuario;
                usuario.Nombre = Nombre;
                usuario.Apellido = Apellido;
                usuario.Rut = Rut;
                usuario.Username = Login;
                usuario.AreaUsuario = AreaUsuario;
                usuario.Rut = Rut;
                usuario.Password = Password1;
                usuario.Password2 = Password2;
                usuario.Email = Email;
                usuario.Activo = Activo;
                usuario.ActualizarPassword = ActualizarPassword;
                usuario.Saldo = Saldo;
                usuario.SaldoAsignado = SaldoAsignado;
                usuario.EsAdministrador = EsAdministrador;
                usuario.Revision = Revision;
                usuario.SysUsuario = UsuarioConectado.IdUsuario;

                Modulos.Rendiciones.Usuarios.Guardar(ref usuario);
                if (Page is Usuarios)
                    ((Usuarios)Page).Cargar();
                Ocultar();

                MostrarOk("Grabación Exitosa", "");
            }
            catch (ResultadoValidacionException resultadoValidacionException)
            {
                MuestraErroresDeValidacion(pnlUsuario, true, resultadoValidacionException);
            }
            catch (Exception exception)
            {
                MuestraMensajeError(pnlUsuario, "<strong>Error:</strong> " + exception.Message);
            }
        }

        protected void BtnCancelarClick(object sender, EventArgs e)
        {
            Ocultar();
        }

        private int IdUsuario
        {
            get { return string.IsNullOrEmpty(hdfIdUsuario.Value) ? 0 : int.Parse(hdfIdUsuario.Value); }
            set { hdfIdUsuario.Value = value.ToString(CultureInfo.InvariantCulture); }
        }
        private string Nombre { get { return txtNombre.Text.Trim(); } set { txtNombre.Text = value; } }
        private string Apellido { get { return txtApellido.Text.Trim(); } set { txtApellido.Text = value; } }
        private string Email { get { return txtEmail.Text.Trim(); } set { txtEmail.Text = value; } }
        private string Rut { get { return txtRut.Text.Trim(); } set { txtRut.Text = value; } }
        private string Login { get { return txtUsername.Text.Trim(); } set { txtUsername.Text = value; } }
        private int? Revision { get { return string.IsNullOrWhiteSpace(hdfRevision.Value) ? (int?)null : (int?)int.Parse(hdfRevision.Value); } set { hdfRevision.Value = value.HasValue ? value.Value.ToString(CultureInfo.InvariantCulture) : ""; } }
        private EAreaUsuario AreaUsuario
        {
            get
            {
                if (rbtProyectos.Checked) return EAreaUsuario.Proyectos;
                if (rbtContabilidad.Checked) return EAreaUsuario.Contabilidad;
                if (rbtTesoreria.Checked) return EAreaUsuario.Tesoreria; ;
                return EAreaUsuario.Ninguno;
            }
            set
            {
                rbtProyectos.Checked = false;
                rbtContabilidad.Checked = false;
                rbtTesoreria.Checked = false;
                switch (value)
                {
                    case EAreaUsuario.Proyectos: rbtProyectos.Checked = true; break;
                    case EAreaUsuario.Contabilidad: rbtContabilidad.Checked = true; break;
                    case EAreaUsuario.Tesoreria: rbtTesoreria.Checked = true; break;
                }
            }
        }
        private string Password1 { get { return txtPassword.Text.Trim(); } set { txtPassword.Text = value; } }
        private string Password2 { get { return txtPassword2.Text.Trim(); } set { txtPassword2.Text = value; } }
        private bool Activo { get { return chkActivo.Checked; } set { chkActivo.Checked = value; } }
        private bool EsAdministrador { get { return chkEsAdministrador.Checked; } set { chkEsAdministrador.Checked = value; } }
        private bool ActualizarPassword { get { return chkRegistrarPassWord.Checked; } set { chkRegistrarPassWord.Checked = value; } }
        private int Saldo
        {
            get { return string.IsNullOrEmpty(hdfSaldo.Value) ? 0 : int.Parse(hdfSaldo.Value); }
            set { hdfSaldo.Value = value.ToString(CultureInfo.InvariantCulture); }
        }
        private int SaldoAsignado
        {
            get { try { return string.IsNullOrEmpty(txtSaldoAsignado.Text) ? 0 : int.Parse(txtSaldoAsignado.Text); } catch { return 0; } }
            set { txtSaldoAsignado.Text = value.ToString(CultureInfo.InvariantCulture); }
        }

        protected void ChkRegistrarPassWordChanged(object sender, EventArgs e)
        {
            txtPassword.Enabled = txtPassword2.Enabled = ActualizarPassword;
        }
    }
}